package main

import "fmt"

func main1() {
	// 定义数组
	var a [3]int
	var b [4]int
	// a = b //不能这样赋值，会报错

	fmt.Println(a)
	fmt.Println(b)

	// 数组初始化：
	// 1.定义时使用初始值列表的初始化
	var cityArray = [4]string{"北京", "上海", "广州", "深圳"}
	fmt.Println(cityArray)

	// 2.编译器自动推导数组长度，根据初始化值的个数来自动推导
	// 注意：数组的长度为常量
	var boolArray = [...]bool{true, false, false, true, false}
	fmt.Println(boolArray)

	// 3.使用索引值方式初始化
	var langArray = [...]string{1: "Golang", 3: "Python", 7: "Java"}
	fmt.Println(langArray)
	fmt.Printf("%T\n", langArray) //打印结果是两部分，分别是长度，类型

	//数组的遍历
	// for 循环遍历
	for i := 0; i < len(cityArray); i++ {
		fmt.Print(cityArray[i], " ")
	}
	fmt.Println()

	// for range 遍历
	for index, value := range cityArray {
		fmt.Print(index, " ", value)
	}
	fmt.Println()

	//不要索引
	for _, value := range cityArray {
		fmt.Print(value, " ")
	}
}

func main2() {
	cityArray := [4][2]string{
		{"北京", "西安"},
		{"上海", "杭州"},
		{"重庆", "成都"},
		{"广州", "深圳"},
	}
	fmt.Println(cityArray)
	fmt.Println(cityArray[2][0])

	//二维数组的遍历
	for _, v1 := range cityArray {
		fmt.Print(v1, " ")
		for _, v2 := range v1 {
			fmt.Print(v2, " ")
		}
	}
	//二维数组只有最外层可以用自动推到的写法，其余内层不可以这么去写
}
func main() {
	x := [3]int{1, 2, 3}
	fmt.Println(x)
	f1(x)
	fmt.Println(x)

	y := [3][2]int{
		{1, 2},
		{3, 4},
		{5, 6},
	}
	fmt.Println(y)
	f2(y)
	fmt.Println(y)
}
func f1(a [3]int) {
	a[0] = 100 //形参不是实参
}
func f2(a [3][2]int) {
	a[0][0] = 100
	//形参，值传递，不去修改原元素的地址
}
